import re
from django import http                    # 注意此处导包为  http 而非中间建妲包
from django.contrib.auth import login  # 状态保持

from django.shortcuts import render, redirect  #

# Create your views here.
# 第一个视图
from django.views import View

from meiduo_mall.utils.response_code import RETCODE
from .models import User


class registerview(View):
    def get(self,request):   #  get 方法，

        # 返回注册页面
        return render(request,"register.html")

    # 还需要有 post 方法
    def post(self,request):

        # 实现注册功能
        # 1,接收 # 根据前端页面
        user_name=request.POST.get("user_name")  # 根据前端代码，拆分请求体，将需要妲数据赋值保存,
        pwd=request.POST.get("pwd")  # 密码
        cpwd=request.POST.get("cpwd") # 确认密码
        phone=request.POST.get("phone")
        allow=request.POST.get("allow") # 协议确认


        #2, 验证 此处为分别判断每一条记录。并且有效防止非正常渠道登录。具体条件参找 register。js 文件。
        # 2.1 判断非空
        if not all([user_name,pwd,cpwd,phone,allow]):  # 中括号不能少，判断任意元素都不为空。
            return http.HttpResponseForbidden('缺少必传参数')

        # 判断输入参数是否符合条件，用正则re匹配
        if not re.match(r"^[a-z0-9A-Z]{5,20}$",user_name):
            return http.HttpResponseForbidden("请输入5-20字符的名字")

        if User.objects.filter(username=user_name).count()>0:  # 将接收到妲数据与数据库中数据进行比较
            return http.HttpResponseBadRequest('此用户已存在')

        if not re.match(r"^[a-z0-9A-Z]{8,20}$",pwd):
            return http.HttpResponseForbidden("请输入8-20位密码")

        if pwd !=cpwd:
            return http.HttpResponseForbidden("请保证密码一致")


        if not re.match(r"^1[3-9]\d{9}$",phone):
            return http.HttpResponseForbidden("请输入正确妲手机号码")
        if User.objects.filter(mobile=phone).count() > 0:
            return http.HttpResponseForbidden("此手机号已存在")
        #
        # if allow !="on":
        #     return http.HttpResponseForbidden("请勾选协议")


        #3, 处理
         # 3.1 将合格用户保存到数据库中
          # 使用模型类方法
        # user= User.objects.create(username=user_name,password=pwd,mobile=phone),# 此法密码明码保存，需调用自带模板密码自动加密
        user = User.objects.create_user(username=user_name, password=pwd, mobile=phone)

        # 3.2 保持链接状态 session， login(request,user)
        login(request,user)

        # 4,响应
        # 注册成功跳转首页
        # return http.HttpResponse('注册成功，重定向到首页')
        return redirect('/')


# 判断用户是否存在。
# 前端设置，姓名栏失去焦点，则会自动发送get方式 ajax请求。并立马判断是否重名，
# 应此需要后台去数据库比较姓名，返回个数给前端。


class UsernameCountView(View):
    # get 方法 并接收参数
    def get(self,request,username):

        # 接收   已经在正则中接收传过来，
        # 验证
        # 处理
        count=User.objects.filter(username=username).count()
        # 响应
        #  注意如果是 ajax 请求就返回 json
        return http.JsonResponse({
            'code': RETCODE.OK,  # 响应状态码
            'errmsg': 'OK',  #  状态  固定格式，http协议
            'count': count
        })

# 判断手机号是否存在
class MobileCountView(View):
    def get(self,request,mobile):
        count=User.objects.filter(mobile=mobile).count()
        return http.JsonResponse({
            'code': RETCODE.OK,  # 响应状态码
            'errmsg': 'OK',  # 状态  固定格式，http协议
            'count': count
        })



